package com.bookcloud.java21.chapter10.注解标记注解108;

import java.lang.reflect.Method;

public class TestClass {
  @TestMethod
  public void testCase1() {
    System.out.println("测试方法1");
  }

  @TestMethod
  public void testCase2() {
    System.out.println("测试方法2");
  }

  @TestMethod
  public void testCase3() {
    System.out.println("测试方法3");
  }

  @Log(name = "查询用户", value = "用户操作了查询用户列表")
  public void queryUser() {
    System.out.println("查询用户");
  }

  public static void main(String[] args) {
    // 获取标记注解
    // 获取TestClass类的所有方法
    Method[] methods = TestClass.class.getDeclaredMethods();
    // 遍历所有方法
    for (Method method : methods) {
      // 判断方法是否被TestMethod注解标记
      if (method.isAnnotationPresent(TestMethod.class)) {
        // 调用方法
        try {
          System.out.println("通过反射技术动态->调用方法：" + method.getName());
          method.invoke(new TestClass());
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
      // 判断方法是否被Log注解标记
      if (method.isAnnotationPresent(Log.class)) {
        System.out.println("=============================");
        System.out.println("方法：" + method.getName() + "被Log注解标记");
        // 获取Log注解
        Log log = method.getAnnotation(Log.class);
        // 输出Log注解的属性值
        System.out.println("Log注解的name属性值：" + log.name());
        System.out.println("Log注解的value属性值：" + log.value());
      }
    }
  }
}
